%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\documentclass{l3deliverable}

\usepackage{svn-multi}
\svnid{$Id: d3.tex 44 2011-11-30 01:07:28Z 0901634m $}
\version{SVN Revision \svnrev~ \

Made \svnday/\svnmonth/\svnyear~ by \svnauthor}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\usepackage{graphicx}%
\usepackage{tabularx}%
\usepackage{url}%
\usepackage{usecasedescription}%
% The following is needed in order to make the code compatible
% with both latex/dvips and pdflatex.
\ifx\pdftexversion\undefined
\usepackage[dvips]{graphicx}
\else
\usepackage[pdftex]{graphicx}
\DeclareGraphicsRule{*}{mps}{*}{}
\fi
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Check these macro values for appropriateness for your own document.

\title{Requirements Document}

\author{Daniel Callander \\
        Stephen McQuistin \\
        Ian Scott \\
		Agnieszka Kielbinska \\
		David Newall}

\date{3 November 2011}

\deliverableID{D3}
\project{PSD3 Group Exercise 1}
\team{'Special' K}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\begin{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\maketitle

\tableofcontents

\newpage

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Standard section for all documents

\section{Introduction}

\subsection{Identification}

This is the requirements specification for Team 'Special' K.

\subsection{Related Documentation}

PSD3 Group Exercise Description http://fims.moodle.gla.ac.uk/file.php/128/assessment/ge-1.pdf

\subsection{Purpose and Description of Document}

The purpose of this document is to outline the requirements which we have developed for the electronic voting system, through the original system specification, stakeholder interview and stakeholder panel. Specifically, the document outlines an extended problem definition, the scope of the system (documented by actor diagrams and a domain model), use case descriptions and an outline of the system's non-functional requirements. Also included in this document is material gathered from stakeholder interviews and the stakeholder panel.

\subsection{Document Status and Schedule}

This is the final Requirements Document, delivered on 1/12/11. It incorporates all changes made as a result of the stakeholder interviews, and stakeholder panel. 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Extended Problem Definition}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

The Computing Science Management Committee (CSMC) has proposed the development of an electronic voting system to improve the management, consistency and convenience of running elections within the school. The School of Computing Science is an intensely democratic organisation. Elections are used, for example:
\begin{itemize}
\item to choose student members of staff-student committees;
\item to elect the head of school; and
\item to elect members of the university senate.
\end{itemize}

Consequently, a new computer based voting system system 'DemosSOCS' has been proposed. The key features envisaged for the system are:
\begin{itemize}
\item creation of different types of elections and referenda, including the nomination of candidates;
\item registering of voters eligible for different elections;
\item casting votes; and
\item computing and publishing results of elections.
\end{itemize}

Obviously, CSMC are keen to ensure that the new system is both usable and secure. Elections will only be held within the School of Computing Science. There is no intention for the voting system to support elections in other schools within the University. The system need only handle textual data (no graphics or multimedia elements) or media-free HTML.
\newline
\newline
The potential users of the system are the staff and students of the School of Computing Science, visitors and, potentially members of staff elsewhere in the university. Both voters and administrators should use their GUID to login to the system. This would then be used to determine the group to which the users belong (e.g. which year, wether or not they are an administrator).
\newline
\newline
There will be some Administrative Staff (most probably Administrative Staff from the Teaching Office) delegated to be in charge of the system (i.e. to create and update an election, resolve a tie, review and publish results, etc.). These users may also have the ability to vote, depending on the configuration of a given election. In this instance, the election's policy will determine who will be allowed to resolve ties or modify the election. In general any other staff members (lecturers, researchers, etc.) do not have any additional functionality beyond the ability to vote.
\newline
\newline
Any voter should be capable of nominating any other (valid) voter, including themselves to be a candidate in the election. The number of nominations required for a person to become a nominee should be configurable but by default one proposal and one second shall be required. Once a voter has become a candidate, they have must explicitly accept the nomination before the election begins. Once the election begins, any candidates who have not accepted their nomination will be removed from the election. Beyond this, voters have the ability to "write-in" a candidates name when voting, that is, to vote for someone not included as a candidate.
\newline
\newline
The system should have standard templates for different types of election and possibly an option to create a new election type. Each election should be configurable so that only specific groups of voters will be allowed to vote in the election. Also different voting policies should be available for each election with first-pass-post as default.
\newline
\newline
Users should be able to use the system on a variety of platforms, including the internet and mobile phones.
\newline
\newline
These requirements have been developed using questions asked during the stakeholder panel and client interviews.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{System Scope}

This section outlines the actors within the electronic voting system, and models the domain of the system. Together, these diagrams and descriptions show the scope of the system.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\subsection{System Actors}

\begin{figure}[htb]
\centering
\includegraphics{d3_imgs/sys_actors.1}
\caption{Actors in electronic voting system}
\end{figure}

Figure 1 shows the actors in the electronic voting system. These are defined as:
\newline
\newline
\textbf{Voter} A user that is capable of voting. Voters are identified by their GUID.
\newline
\newline
\textbf{Candidate} A voter that has been nominated twice, and has not declined their nomination.
\newline
\newline
\textbf{Administrator} Non-academic staff that manage and control the voting system.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\subsection{Domain Model}

\begin{figure}[!htb]
\centering
\includegraphics{d3_imgs/domain_model.1}
\caption{Domain model of electronic voting system}
\end{figure}

Figure 2 illustrates the major domain elements of the voting system.\newline
\newline
Each election can have an unlimited number of candidates, and each candidate can be in any number of elections. Voters can vote once per election, and this vote includes their candidate of choice, the election, and the voter themselves. Voters, Candidates and Administrators are all children of the User class, which contains the basic information relevant to each user type.
\newline
\newline
It is not clear from the domain model that votes are anonymous once an election has ended. A relation between voters and their votes exists to ensure that only one vote is cast per voter. This is then removed once the election has ended.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Use Case Descriptions}

We have divided our use cases into four broad categories: common utility cases, voter use cases, administrator use cases and candidate use cases.
\newline
\newline
\textbf{Utility (4.1)}
\begin{itemize}
	\item Login
	\item Search for election
\end{itemize}

\textbf{Voter (4.2)}
\begin{itemize}
	\item Vote 
	\item Nominate candidate
	\item View published results
\end{itemize}

\textbf{Candidate (4.3)}
\begin{itemize}
	\item Accept candidacy
	\item Decline candidacy
	
\end{itemize}

\textbf{Administrator (4.4)}
\begin{itemize}
	\item Create election
	\item Update election
	\item Publish results
	\item Resolve tie 
	\item Add candidate
	\item Remove candidate 
	\item Add use to group
	\item Remove user from group
\end{itemize}

\newpage
\subsection{Utility cases}

This section describes use cases which are common to other use cases in the system.

\begin{UseCaseTemplate}
    \UseCaseLabel{
        Search for Election
    }
    \UseCaseDescription{
        \includegraphics{d3_imgs/election_search.1} 
    }
    \UseCaseRationale{
        Users of the system must be able to find one particular instance of an
		election.
    }
    \UseCasePriority{
        Must Have
    }
    \UseCaseStatus{
        Not Implemented
    }
    \UseCaseActors{
        \begin{itemize}
            \item Voter
			\item Administrator
        \end{itemize}
    }
    \UseCaseIncludes{
        \begin{itemize}
            \item Login
        \end{itemize}
    }
    \UseCaseScenarios{
        \begin{description}
            \item[intro] John is a computer science student. He wants to find 
			the student committee election for his year.
            \item[primary] John logs into the system with his matriculation number and associated password. He is then presented with a list of
			elections he is eligible to vote in, in which the student committee
			election for his year is listed.
            \item[secondary] John attempts to log onto the system with his matriculation number and associated password. He receives an error message, stating that the voting system is currently unavailable at this time. John is then logged out of the system.
        \end{description}
    }
    \UseCaseRisks{
        \begin{itemize}
            \item The system may not be able to correctly identify which group the voter is in, showing the incorrect elections.
        \end{itemize}
    }
\end{UseCaseTemplate}


\newpage
\subsection{Voter cases}

\includegraphics{d3_imgs/voter_usecases.1} 

\begin{UseCaseTemplate}
    \UseCaseLabel{
        Vote in an election
    }
    \UseCaseDescription{
        \includegraphics{d3_imgs/vote.1} 
		 
    }
    \UseCaseRationale{
        The essence of the system is that eligible users are able to cast votes in elections.
    }
    \UseCasePriority{
        Must Have
    }
    \UseCaseStatus{
        Not Implemented
    }
    \UseCaseActors{
        \begin{itemize}
            \item Voter
        \end{itemize}
    }
    \UseCaseIncludes{
        \begin{itemize}
            \item Login
			\item Search for Election
        \end{itemize}
    }
    \UseCaseConditions{
        \begin{description}
            \item[pre] The voter must be eligible to vote in the election.
        \end{description}
    }
    \UseCaseScenarios{
        \begin{description}
            \item[intro] John is a computer science student. He wants to vote for one of the candidates in the student representative election for his year.
            \item[primary] John logs into the system with his GUID and associated password. He selects the student representative election for his year. He then selects the candidate he wishes to vote for. He then acknowledges the acceptance of his vote. John logs out of the system.
            \item[secondary] John attempts to log onto the system with his GUID and associated password. He receives an error message, stating that the voting system is currently unavailable at this time. John is then logged out of the system.
        \end{description}
    }
    \UseCaseRisks{
        \begin{itemize}
            \item Recording the vote of a voter may pose a security risk. There is some conflict between stakeholders on this; votes will be recorded for the duration of an election, but this will be deleted once the election has ended.
        \end{itemize}
    }
\end{UseCaseTemplate}

\begin{UseCaseTemplate}
  \UseCaseLabel{
    Nominate Candidate
  }
  \UseCaseDescription{
  \includegraphics{d3_imgs/nominate.1} 
  }
  \UseCaseRationale{
    Voters using the system must be able to nominate people, including themselves, to be candidates in elections. 
  }
  \UseCasePriority{
    Must Have
  }
  \UseCaseStatus{
    Not Implemented
  }
  \UseCaseActors{
    \begin{itemize}
    \item Voter
    \end{itemize}
  }
  \UseCaseExtensions{
  }
  \UseCaseIncludes{
    \begin{itemize}
    \item Login
    \item Search for Election
    \end{itemize}  
  }
  \UseCaseConditions{
    \begin{description}
      \item[pre] The election exists and the nominee is a valid candidate for that particular election.
      \item[post] The nominee is given another nomination against his/her name and if this is enough to be considered a candidate, then they become a candidate.
    \end{description}
  }
  \UseCaseNonFunctionalRequirements{
  }
  \UseCaseScenarios{
    \begin{description}
      \item[Intro] John wants to nominate Jack to be a class representative for level three.
      \item[Primary] John logs on to the system with his matriculation number and password, he selects the "level 3 class reps" election. John enters his nomination, he is the first person to nominate Jack. This is noted by the system and Jack now needs one more nomination to be a candidate. John then logs off.
      \item[Alternative] John logs on to the system but he cannot find the "level 3 class reps" election. He assumes the admins have not set up the election yet so he logs out.
	\end{description}
  }
  \UseCaseRisks{
    \begin{itemize}
      \item The system may not be able to tell what group the user is in, so they might be able to nominate people for elections that aren't meant for them or vice versa.
	\end{itemize}
  }
  \UseCaseUserInterface{
  }
\end{UseCaseTemplate}

\begin{UseCaseTemplate}
    \UseCaseLabel{
        View published results
    }
    \UseCaseDescription{
		\includegraphics{d3_imgs/view_results.1}
    }
    \UseCaseRationale{
       Every voter has the ability to view the results of an election.
    }
    \UseCasePriority{
        Must Have
    }
    \UseCaseStatus{
        Not Implemented
    }
    \UseCaseActors{
        \begin{itemize}
            \item Voter			
        \end{itemize}
    }
    \UseCaseExtensions{}
    \UseCaseIncludes{
        \begin{itemize}
            \item Choose the election			
        \end{itemize}
    }
    \UseCaseConditions{
        \begin{description}
            \item[pre] Results must be published.
        \end{description}
    }
    \UseCaseNonFunctionalRequirements{
    }
    \UseCaseScenarios{
       \begin{description}
	            \item Jack is a Level 3 Computing Science student who has recently been nominated for an election to become a student representative for Level 3 Computing Science class.
	            The election ended recently and Jack now wants to check the results of it.
	            \item[Primary scenario] He logs into the system and chooses the election ``Level 3 Computing Science ‚Äì student representative''.
	            He then chooses the option to view the results of the election and finds out he has been elected the student rep. He jumps out of his chair, runs around the room 5 times, screaming and shouting, and then logs off the system.
	            \item[Alternative Scenario 1]He logs into the system and chooses the election ``Level 3 Computing Science ‚Äì student representative''.
	            He then chooses the option to view the results of the election. However, the system reports that the results are not published yet, and suggest to check again later. Jack is very disappointed and logs off the system.
	            \item[Alternative Scenario 2]He logs into the system but there is a message displayed saying that the system is currently unavailable.
	        \end{description}
    }
    \UseCaseRisks{
        \begin{itemize}
            \item The system may be currently unavailable.
            \item Results published may not be valid - need to be updated.
        \end{itemize}
    }
    \UseCaseUserInterface{
    }
\end{UseCaseTemplate}

\newpage
\subsection{Candidate cases}

\includegraphics{d3_imgs/candidate_usecases.1}
\newpage
\begin{UseCaseTemplate}
    \UseCaseLabel{
        Accept candidacy
    }
    \UseCaseDescription{
        \includegraphics{d3_imgs/cand_acc.1} 
    }
    \UseCaseRationale{
    	Candidates must be able to accept candidacy }
    \UseCasePriority{
        Must Have
    }
    \UseCaseStatus{
        Not Implemented
    }
    \UseCaseActors{
        \begin{itemize}
            \item Candidate
        \end{itemize}
    }
    \UseCaseIncludes{
        \begin{itemize}
            \item Login
        \end{itemize}
    }
    \UseCaseScenarios{
        \begin{description}
            \item[intro] John is a computer science student. He has been informed that he is a candidate in the student council election.
            \item[primary] He logs onto the system, views the election(s) he is an eligible candidate in. He then selects the election he wishes to accept the candidacy for, he then selects yes telling the system that he accepts the candidacy.
            \item[secondary] John attempts to log onto the system with his matriculation number and associated password. He receives an error message, stating that the voting system is currently unavailable at this time. John is then logged out of the system.
        \end{description}
    }
    \UseCaseRisks{
        \begin{itemize}
            \item The system may not be able to correctly identify which group the candidate is in, showing the incorrect elections.
        \end{itemize}
    }
\end{UseCaseTemplate}


\newpage
\begin{UseCaseTemplate}
    \UseCaseLabel{
        Decline candidacy
    }
    \UseCaseDescription{
        \includegraphics{d3_imgs/cand_dec.1} 
    }
    \UseCaseRationale{
        Candidates must be able to decline candidacy.
    }
    \UseCasePriority{
        Must Have
    }
    \UseCaseStatus{
        Not Implemented
    }
    \UseCaseActors{
        \begin{itemize}
            \item Candidate
        \end{itemize}
    }
    \UseCaseIncludes{
        \begin{itemize}
            \item Login
        \end{itemize}
    }
    \UseCaseScenarios{
        \begin{description}
            \item[intro] John is a computer science student. He has been informed that he is a candidate in the student council election.
            \item[primary] He logs onto the system, views the election(s) he is an eligible candidate in. He then selects the election he wishes to decline the candidacy for, he then selects no telling the system that he decline the candidacy.
            \item[secondary] John attempts to log onto the system with his matriculation number and associated password. He receives an error message, stating that the voting system is currently unavailable at this time. John is then logged out of the system.
        \end{description}
    }
    \UseCaseRisks{
        \begin{itemize}
            \item The system may not be able to correctly identify which group the candidate is in, showing the incorrect elections.
        \end{itemize}
    }
\end{UseCaseTemplate}
\newpage
\subsection{Administrator cases}

\includegraphics{d3_imgs/admin_usecases.1}

\begin{UseCaseTemplate}
    \UseCaseLabel{
        Create election
    }
    \UseCaseDescription{
    \includegraphics{d3_imgs/create_election.1}

    }
    \UseCaseRationale{
        Administrators must be able to create elections for voters to vote in.
    }
    \UseCasePriority{
        Must Have
    }
    \UseCaseStatus{
        Not Implemented
    }
    \UseCaseActors{
        \begin{itemize}
			\item Administrator
        \end{itemize}
    }
    \UseCaseExtensions{}
    \UseCaseIncludes{
        \begin{itemize}
            \item Login
        \end{itemize}
    }
    \UseCaseConditions{
        \begin{description}
            \item[pre] There must be some eligible voters.
        \end{description}
    }
    \UseCaseNonFunctionalRequirements{
    }
    \UseCaseScenarios{
        \begin{description}
            \item[intro] John is an administrator.
            \item[primary] John logs into the system with his staff ID and password, and selects the create election option. He enters the appropriate details (type, name, start and end dates, eligible voters), and creates the election.
            \item[secondary] John attempts to create an election. John is not sure if the name of his election is unique, and has to log out to check this.
        \end{description}
    }
    \UseCaseRisks{
        \begin{itemize}
            \item The administrator may not be able to uniquely identify different elections with the same name.
        \end{itemize}
    }
    \UseCaseUserInterface{
    }
\end{UseCaseTemplate}

\begin{UseCaseTemplate}
  \UseCaseLabel{
   Update Election
 }
  \UseCaseDescription{
	\includegraphics{d3_imgs/update_election.1}
  }
  \UseCaseRationale{
    A member of staff within the CSMC has been appointed an administrator of the system. It is there jobs to update elections. 
  }
  \UseCasePriority{
    Must Have
  }
  \UseCaseStatus{
    Not Implemented
  }
  \UseCaseActors{
    \begin{itemize}
    \item Administrator
    \end{itemize}
  }
  \UseCaseExtensions{
  }
  \UseCaseIncludes{
    \begin{itemize}
    \item Login
    \item Search for User
    \item Search for Election
    \end{itemize}  
  }
  \UseCaseConditions{
    \begin{description}
      \item[pre] The nominee must have already registered with the system.
      \item[pre] The administrator must be notified of the nomination.
      \item[post] The nominee must be informed they are now a candidate.
    \end{description}
  }
  \UseCaseNonFunctionalRequirements{
  }
  \UseCaseScenarios{
    \begin{description}
      \item[Intro] John is a member of the administrative staff for the electoral voting system. He has been notified that the number of candidates needs to be updated as Karen has been nominated, multiple times. He now needs to access the system to update this change.
      \item[Primary] He logs into the system, he accesses the area where all nominated candidates are stored. He gets Karen's details and the election she has been nominated for. He then goes to the administrative page for the election and adds Karen to the list of candidates and saves the changes. The system sends the nominee a notification letting them know they are a candidate. He then logs out.
      \item[Alternative Scenario 1] He logs into the system, he accesses the area where all nominated candidates are stored. However Karen's details are not there as they have not been added yet. John logs out and waits for the details to be added.
      \item[Alternative Scenario 2]He logs into the system, he tries to access the area where the candidates details are stored. The system reports a connection failure, and that he should try again. John logs out annoyed at this inconvenience.
	\end{description}
  }
  \UseCaseRisks{
    \begin{itemize} 
      \item If Karen does not recieve a notice from the system, the election will not be able to start as an election cannot begin until all the candidates consent to being a candidate.
	\end{itemize}
  }
  \UseCaseUserInterface{
  }
\end{UseCaseTemplate}

\begin{UseCaseTemplate}
  \UseCaseLabel{
    Publish Results
  }
  \UseCaseDescription{
  		\includegraphics{d3_imgs/publish_results.1}

  }
  \UseCaseRationale{
   Once an election is over, the voters will want to know the results. So it is essential that the admin staff are able to publish the results so that they are available to be seen. 
  }
  \UseCasePriority{
    Must Have
  }
  \UseCaseStatus{
    Not Implemented
  }
  \UseCaseActors{
    \begin{itemize}
    \item Admin Staff
    \end{itemize}
  }
  \UseCaseExtensions{
  }
  \UseCaseIncludes{
    \begin{itemize}
    \item Login
    \item Search for Election
    \end{itemize}  
  }
  \UseCaseConditions{
    \begin{description}
      \item[pre] The election is over. 
      \item[post] There is a winner of the election and users will be able to log onto the system to see the results.
    \end{description}
  }
  \UseCaseNonFunctionalRequirements{
  }
  \UseCaseScenarios{
	\begin{itemize}
      \item[Intro] The deadline for votes in the level 3 class rep election passes. One of the administration staff goes to publish the results.
      \item[Primary] The admin staff logs on to the system and selects the level 3 class rep election. He/she clicks on the publish results button and the results are now available to view. The admin staff logs out.
      \item[Alternative] The admin staff logs on but then loses connection to the system as they are selecting the election. So they log off to try again later.
	\end{itemize}
  }
  \UseCaseRisks{
    \begin{itemize}
      \item The election ends in a draw. This is sorted out by the resolve tie use case.
	\end{itemize}
  }
  \UseCaseUserInterface{
  }
\end{UseCaseTemplate}

\begin{UseCaseTemplate}
    \UseCaseLabel{
        Resolve a tie
    }
    \UseCaseDescription{
        \includegraphics{d3_imgs/resolve_tie.1}
    }
    \UseCaseRationale{
       Administrative staff in charge of the voting system is also responsible to resolve any ties in any election by overwriting the results.
    }
    \UseCasePriority{
        Must Have
    }
    \UseCaseStatus{
        Not Implemented
    }
    \UseCaseActors{
        \begin{itemize}
            \item Administrator			
        \end{itemize}
    }
    \UseCaseExtensions{
    \begin{itemize}
                \item Update the election			
    \end{itemize}
    }
    \UseCaseIncludes{
        \begin{itemize}
            \item Choose the election
            \item Overwrite the election		
        \end{itemize}
    }
    \UseCaseConditions{
        \begin{description}
            \item[pre] Election must be finished.
            \item[pre] A tie must exist.
            \item[post] Resolved tie.
            \item[post] Results can be published.
        \end{description}
    }
    \UseCaseNonFunctionalRequirements{
    }
    \UseCaseScenarios{
      \begin{description}
	\item[Intro] Gail is a secretary in the Computing Science Department. She if also one of the three administrators of the voting system. She is in charge of the recent election for Level 3 Class Student Representative. Five students were nominated for the election but only two would be offered the position. Mark, a twenty-one year old CS student received the majority of all the votes and, in result, he became one of the student reps. However, it is not clear who will become the second student rep as there is a tie between two other students ‚Äì John and Bob. In such case it is Gail's responsibility to resolve such tie by overwriting the decision given by the system(a tie) and deciding herself about who will be given the role of the student rep.
	\item[Primary scenario] She logs into the system as the administrator. She select the election ``Level 3 Computing Science Class ‚Äì Student Representatives''. She then selects the option to view the results, which show that Mark has been elected and that there is a tie between John and Bob. She selects and option to overwrite the results of the election. She then confirms Mark as a student rep, and chooses John to become the second student rep.
	She then updates the results of the election and publish them. She logs off the system.
	\item[Alternative scenario] She logs into the system as the admin but there is a message displayed saying that the system is currently unavailable.
	\end{description}
    }
    \UseCaseRisks{
        \begin{itemize}
            \item The system may be currently unavailable.
        \end{itemize}
    }
    \UseCaseUserInterface{
    }
\end{UseCaseTemplate}

\newpage
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Non Functional Requirements}

\textbf{Usability}
\begin{itemize}
\item The majority of users will be members of the School of Computing Science so they should already be familiar enough that a command-line interface will be sufficient. However, as the system may potentially be used by visitors and members from other faculties, the system will need to be created in such a way that it also suits these users.
\end{itemize}

\textbf{Error Handling}
\begin{itemize}
\item System should respond gracefully to input errors; as it will be a command line interface, the input error rate may be higher than that of a graphical interface.
\end{itemize}

\textbf{Documentation}
\begin{itemize}
\item Documentation will be provided on-line. As it is a command line program, a ‘help’ command of some sort should be implemented to provide users with documentation as they require it. This documentation should suit all users.
\end{itemize}

\textbf{Availability}
\begin{itemize}
\item The system should store files on a server that is backed up regularly.
\item The system needs to be available at all times during elections, however paper-based voting can suffice if the system was to become unavailable.
\item The organisation can survive without the system as this is an add on feature for it.
\end{itemize}

\textbf{Security}
\begin{itemize}
\item Votes must be registered securely and not be able to be tampered with during the elections. 
\item All votes should be anonymous, beyond registering that a specific user has voted in an election (to ensure only one vote per voter).
\end{itemize}

\textbf{Resources}
\begin{itemize}
\item System will be accessible only from one designed machine.
\item Limited amount of time available for development team so must be simple.
\end{itemize}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Summary}

This document outlines the scope of the system (through an actor diagram and a domain model) and also the main use cases associated with it.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\appendix

\section{Stakeholder Interview Documentation}

This is not a word-for-word transcript of the stakeholder interview. It lists all questions asked, and our interpretation of the answer given.
\newline
\newline
\textbf{Does the CSMC register the voters on the system, or do voters register themselves?}
Voters use username/password login for their Unix and then they can vote using this. This login would tell the system if they are staff/student/head/etc.
\newline
\newline
\textbf{Are the CSMC in charge of administrating the voting system?}
Administrative staff in general would be in charge, e.g: support/admin, not specifically the CSMC.
\newline
\newline
\textbf{Do staff members (not CSMC) have any additional functionality beyond just voting?}
No, basically.
\newline
\newline
\textbf{Does the system publish results automagically?}
Administrator should click a button to actually publish the results, so they can review the results before actually putting them out.
\newline
\newline
\textbf{What sort of voting system should be used?}
Different voting policies for each election. Modular system to actually pick what system is used. Majority, first pass post, etc. Priority is to implement first-pass-post then extend it afterwards to support other modes.
\newline
\newline
\textbf{Will all votes be capable of nominating any other voters, including themselves, to be a candidate?}
Yes.
\newline
\newline
\textbf{How many nominations are required until a person becomes a candidate? Is it configurable?}
Configurable per election. As a starting point, one proposal and one second required.
\newline
\newline	
\textbf{Are there any stipulations on different elections? e.g: are there any types of elections that voters will not be allowed to vote?}
Some elections are for specific classes of people, e.g: staff/students only. Should be configurable per elections. We should group users somehow.
\newline
\newline
\textbf{Should there be set different election types, or can any sort of elections be created?}
Should have maybe standard templates, but configurable might be an idea.
	\newline
	\newline
\textbf{What if there is a tie in the elections?}
A manual override in the event of a tie by an administrator should be a possibility.
\newline
\newline
\textbf{Preventing multiple votes:}
Prevent voting multiple times from same login, as this is coming from Unix login this should not be an issue.
\newline
\newline
\textbf{Dedicated machine, or users vote on their own lab machines?}
Dedicated machine probably best. Users can login remotely via SSH and then vote that way. Administrator would also be able to login and manage the system.

\section{Stakeholder Panel Documentation}

This is not a word-for-word transcript of the stakeholder panel. However, it summarises what were the main questions asked, and our summary of the answers given.
\newline
\newline
\textbf{Are multiple ongoing elections allowed?}
Yes.
\newline
\newline
\textbf{Should you be allowed to change your vote?}
The administrator of the election should choose this. Either first or last could stand.
\newline
\newline
\textbf{How should a nominee decline there candidacy?}
This should be handled by the system.
\newline
\newline
\textbf{Does the system need to work with more than one computer?}
Yes -- conflict with earlier requirements gathered
\newline
\newline
\textbf{What type of voting systems are used in the school?}
First past the post, but maybe have an option for it.
\newline
\newline
\textbf{Can the candidate quit during the election?}
Yes.
\newline
\newline
\textbf{What happens to the election in this case?}
If there is only one candidate, they would obviously automatically win, otherwise people would need to revote.
\newline
\newline
\textbf{Should there be candidate manifesto information, etc?}
“It would be a nice option” but it’s not required. But there should be a maximum length of this.
\newline
\newline
\textbf{Administrator creates an election, then someone from the school must confirm it?}
Yes -- not identified earlier.
\newline
\newline
\textbf{Is there a required of percentage of voters required?}
Nope.
\newline
\newline
\textbf{What access do we have to the student database? (e.g: getting names, etc)}
There is a web service we can send their GUID to and it will respond if it is valid or not, and their group. These don’t actually exist. -- conflict with earlier requirements, not sure if this holds.
\newline
\newline
\textbf{How do elections finish?}
There should be a deadline date and time, after which votes should stop counting.
\newline
\newline
\textbf{What is with the web interface?}
Should run on everything. Phones, web app, etc.
\newline
\newline
\textbf{Anonymous votes?}
Store until the end of the election, and then wipe who voted for what. Easiest solution, probably.
\newline
\newline
\textbf{Does an administrator need to verify the results before posting?}
No, verification is making sure the system is working correctly, not actually the results. So, not the actual results.
\newline
\newline
\textbf{Should an archive of elections be kept?}
Yes, but stored without who voted for what of course.
\newline
\newline
\textbf{Is it possible for there to be late candidates?}
Conflict. Tim would like that you can just write in the candidate’s name, rather than specific candidates.
\newline
\newline
\textbf{Can a candidate be in more than one election at a time?}
Yes.
\newline
\newline
\textbf{If they win both elections, can they decline one for the other?}
Yes. Presumably it would default to the next candidate.
\newline
\newline
\textbf{What if a nominee does not answer?}
Decline is the default state, they must specifically accept. For nominations, the users can nominate BUT the administrators should actually add these as candidates. NOT automatically -- conflict.
\newline
\newline
\textbf{Can a candidate vote in their own election?}
Presumably they vote for themselves by default.
\newline
\newline
\textbf{What sort of support is required for the system? (README or tutorial, etc?)}
It should be user friendly. Maybe to the point of not needing instructions (for voter atleast)
Documentation needs to be a thing, a PDF maybe. Built in help!
\newline
\newline
\textbf{What sort of information should be stored per election?}
Just the total votes per candidate. Don’t bother storing which user voted for who. Forever.
\newline
\newline
\textbf{What types of election are there (groups)? e.g; students for students, staff only for staff? etc?}
Probably configurable per election. Should they be preconfigured?
\newline
\newline
\textbf{After election, should it automatically publish?}
Verified that the system worked correctly by an admin, but yes. You can only vote once per login.
e.g: you must complete a full cycle of logging in, voting, logging out, etc.
\newline
\newline
\textbf{Are there results during the election?}
No, but, show the current number of votes.
\newline
\newline
\textbf{Can admins vote in the election?}
Yes. Policy should specify.
\newline
\newline
\textbf{Should the prototype actually implement the database?}
No, the prototype only needs to echo out pretending it’s working. It doesn’t actually need to read or write anything. It doesn’t actually need to do anything functional.
\newline
\newline
\textbf{Can students ever create elections?}
Yes - It must be done via an administrator.
\newline
\newline
\textbf{Logging into the system?}
They should log in using the GUID, to the system.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\end{document}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
